#include<iostream>
#include<unordered_map>
#include<functional>
#include<time.h>
#include<sys/types.h>
#include<unistd.h>

using namespace std;
using tast_t=function<void()>;

void Task1()
{
    cout<<"我是一个打印任务 : pid :"<<getpid()<<endl;
    
}
void Task2()
{
    cout<<"我是一个日志任务 pid :"<<getpid()<<endl;
}
void Task3()
{
    cout<<"我是一个快速任务 pid :"<<getpid()<<endl;
}


static int  number=0;
class Task
{
private:
   unordered_map<int,tast_t> _tasks;
public:
    Task()
    {
        srand(time(nullptr));
        InitTask(Task1);
        InitTask(Task2);
        InitTask(Task3);

    }
    //插入任务
    void InitTask(tast_t t)
    {
        _tasks[number++]=t;
    }
    int SelectTask()
    {
        return rand()%number;
    }
    //根据nums派发任务
    void Excute(int nums)
    {
        if(_tasks.find(nums)==_tasks.end())return;
        _tasks[nums]();
    }
    ~Task()
    {

    }
};

Task tm;
void Work()
{

    while (true)
    {
        int cmd = 0;
        int n = read(0, &cmd, sizeof(cmd));
        if (n == sizeof(cmd))
        {
            tm.Excute(cmd);
        }
        else if (n == 0)
        {
            cout << "pid  " << getpid() << "   quit  " << endl;
            break;
        }
        else
        {
        }
    }
}
